#include<iostream>
using namespace std;

class Person
{
public:
    // 构造函数的分类：
    // 1.按参数进行构造：有参构造和无参构造
    // 2.按类型进行构造：拷贝构造
    Person()
    {
        cout << "Pesson()的构造函数" << endl;
    }

    Person(int a)
    {
        age = a;
        cout << "Pesson()的有参构造函数" << endl;
    }

    Person(const Person &p)
    {
        // 将传入对象身上的所以属性传入到我的身上
        age = p.age;
        cout << "Person的拷贝构造函数" << endl;
    }

    ~Person()
    {
        cout << "Person()的析构函数" << endl;
    }

    int age;
};

// 调用
void test01()
{
    // 1.括号法
    Person p1; //默认构造函数的调用
    Person p2(10); //有参构造函数的调用
    Person p3(p2); // 拷贝构造函数的调用

    cout << "p2的年龄:" << p2.age << endl;
    cout << "p3的年龄:" << p3.age << endl;

    // 2.显示法 
    Person p4;
    Person p5 = Person(10); //有参构造
    Person p6 = Person(p5); //拷贝构造
    cout << "p2的年龄:" << p5.age << endl;
    cout << "p3的年龄:" << p6.age << endl;

    // 3.隐式转换法
    Person p7 = 10; //有参构造
    Person p8 = p7; //拷贝构造
}

int main()
{
    test01();

    return 0;
}

